home *** CD-ROM | disk | FTP | other *** search
- short edmask1[3][3] = {{0, 1, 0},
- {0, 1, 0},
- {0, 1, 0}};
-
- short edmask2[3][3] = {{0, 0, 0},
- {1, 1, 1},
- {0, 0, 0}};
-
- short edmask3[3][3] = {{0, 1, 0},
- {1, 1, 1},
- {0, 1, 0}};
-
- short edmask4[3][3] = {{1, 1, 1},
- {1, 1, 1},
- {1, 1, 1}};
-
-
-
-
- /*******************************************
- *
- * mask_dilation(...
- *
- * This function performs the dilation
- * operation using the erosion-dilation
- * 3x3 masks given above. It works on
- * 0-value images.
- *
- *******************************************/
-
- mask_dilation(in_name, out_name, the_image, out_image,
- il, ie, ll, le, value, mask_type)
- char in_name[], out_name[];
- int il, ie, ll, le;
- short the_image[ROWS][COLS],
- out_image[ROWS][COLS],
- mask_type, value;
- {
- int a, b, count, i, j, k;
- int length, width;
- struct tiff_header_struct image_header;
- short mask[3][3], max;
-
- /**************************************
- *
- * Copy the 3x3 erosion-dilation mask
- * specified by the mask_type.
- *
- ***************************************/
-
- switch(mask_type){
- case 1:
- copy_3_x_3(mask, edmask1);
- break;
- case 2:
- copy_3_x_3(mask, edmask2);
- break;
- case 3:
- copy_3_x_3(mask, edmask3);
- break;
- case 4:
- copy_3_x_3(mask, edmask4);
- break;
- default:
- printf("\nInvalid mask type, using mask 4");
- copy_3_x_3(mask, edmask4);
- break;
- }
-
- if(does_not_exist(out_name)){
- printf("\n\n output file does not exist %s", out_name);
- read_tiff_header(in_name, &image_header);
- round_off_image_size(&image_header,
- &length, &width);
- image_header.image_length = length*ROWS;
- image_header.image_width = width*COLS;
- create_allocate_tiff_file(out_name, &image_header,
- out_image);
- } /* ends if does_not_exist */
-
- read_tiff_image(in_name, the_image, il, ie, ll, le);
-
- /***************************
- *
- * Loop over image array
- *
- ****************************/
-
- printf("\n");
-
- for(i=1; i<ROWS-1; i++){
- if( (i%10) == 0) printf("%3d", i);
- for(j=1; j<COLS-1; j++){
- max = 0;
- for(a=-1; a<=1; a++){
- for(b=-1; b<=1; b++){
- if(mask[a+1][b+1] == 1){
- if(the_image[i+a][j+b] > max)
- max = the_image[i+a][j+b];
- } /* ends if mask == 1 */
- } /* ends loop over b */
- } /* ends loop over a */
- out_image[i][j] = max;
- } /* ends loop over j */
- } /* ends loop over i */
-
- fix_edges(out_image, 3);
-
- write_array_into_tiff_image(out_name, out_image,
- il, ie, ll, le);
-
- } /* ends mask_dilation */
-
-
-
-
-
- /*******************************************
- *
- * mask_erosion(...
- *
- * This function performs the erosion
- * operation using the erosion-dilation
- * 3x3 masks given above. It works on
- * 0-value images.
- *
- *******************************************/
-
- mask_erosion(in_name, out_name, the_image, out_image,
- il, ie, ll, le, value, mask_type)
- char in_name[], out_name[];
- int il, ie, ll, le;
- short the_image[ROWS][COLS],
- out_image[ROWS][COLS],
- mask_type, value;
- {
- int a, b, count, i, j, k;
- int length, width;
- struct tiff_header_struct image_header;
- short mask[3][3], min;
-
- /**************************************
- *
- * Copy the 3x3 erosion-dilation mask
- * specified by the mask_type.
- *
- ***************************************/
-
- switch(mask_type){
- case 1:
- copy_3_x_3(mask, edmask1);
- break;
- case 2:
- copy_3_x_3(mask, edmask2);
- break;
- case 3:
- copy_3_x_3(mask, edmask3);
- break;
- case 4:
- copy_3_x_3(mask, edmask4);
- break;
- default:
- printf("\nInvalid mask type, using mask 4");
- copy_3_x_3(mask, edmask4);
- break;
- }
-
- if(does_not_exist(out_name)){
- printf("\n\n output file does not exist %s", out_name);
- read_tiff_header(in_name, &image_header);
- round_off_image_size(&image_header,
- &length, &width);
- image_header.image_length = length*ROWS;
- image_header.image_width = width*COLS;
- create_allocate_tiff_file(out_name, &image_header,
- out_image);
- } /* ends if does_not_exist */
-
- read_tiff_image(in_name, the_image, il, ie, ll, le);
-
- /***************************
- *
- * Loop over image array
- *
- ****************************/
-
- printf("\n");
-
- for(i=1; i<ROWS-1; i++){
- if( (i%10) == 0) printf("%3d", i);
- for(j=1; j<COLS-1; j++){
- min = value;
- for(a=-1; a<=1; a++){
- for(b=-1; b<=1; b++){
- if(mask[a+1][b+1] == 1){
- if(the_image[i+a][j+b] < min)
- min = the_image[i+a][j+b];
- } /* ends if mask == 1 */
- } /* ends loop over b */
- } /* ends loop over a */
- out_image[i][j] = min;
- } /* ends loop over j */
- } /* ends loop over i */
-
- fix_edges(out_image, 3);
-
- write_array_into_tiff_image(out_name, out_image,
- il, ie, ll, le);
-
- } /* ends mask_erosion */
-
-
-
-
-
- /***********************************************
- *
- * copy_3_x_3(a, b)
- *
- * This function copies a 3x3 array of shorts
- * from one array to another. It copies array
- * b into array a.
- *
- ***********************************************/
-
- copy_3_x_3(a, b)
- short a[3][3], b[3][3];
- {
- int i, j;
- for(i=0; i<3; i++)
- for(j=0; j<3; j++)
- a[i][j] = b[i][j];
- } /* ends copy_3_x_3 */
-
-
-